#include "pch.hpp"
#include "ContextPool.hpp"

using namespace Engine;
using namespace Engine::Script;




ContextPool::ContextPool(pointer<asIScriptEngine> engine, Reflectable::weak_ptr reflectable)
	: m_engine(engine)
	, m_reflectable(reflectable)
{
	m_engine->AddRef();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ContextPool::post_create(ptr _this)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




Context::ptr ContextPool::context()
{
	for(auto i = m_contexts.rbegin(); i != m_contexts.rend(); ++i)
	{
		if((*i)->state() == Context::Idle)
			return *i;
	}

	m_contexts.push_back(Context::create(m_engine, m_reflectable));

	auto context = m_contexts.back();
	context->attach(m_debugger);
	return context;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ContextPool::attach(Debugger::ptr debugger)
{
	m_debugger = debugger;

	foreach(Context::ptr ctx, m_contexts)
		ctx->attach(debugger);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
